As known in the art, software code comprises instructions that may be used to control or instruct the operation of one or more processing devices, such as microprocessors, microcontrollers, co-processors, etc. Indeed, software code is ubiquitous and pervades many aspects of modern day technology. Further, it is not uncommon for software development projects to require the services of numerous software code developers and their supervisors for periods of time stretching over many months or even years. In order to produce, well-designed, efficient code, it is crucially important to engage in quality assessments, i.e., to take those steps necessary to ensure code is being written in accordance with industry and project-specific quality standards, is meeting appropriately defined benchmarks and delivers the functionality as per requirements. Usually, project code quality standards and benchmarks are pre-defined for a project, either by the customer, by the software development service provider or both.
Typical code quality processes rely on periodic centralized quality assessments to ensure that quality targets are achieved. These assessments are carried out using automated tools and/or manual checks on the complete code-base (i.e., substantially all of the code capable of being tested at that point) as it provides a complete quality view of the software-under-development. The granularity or frequency of the assessment period determines how proactive a project team can be in resolving quality issues. For example, quality assessment performed every day provides substantial opportunity for proactive resolution of quality issues, i.e., the cost of solving quality issues may be reduced given that problems or potential problems arc identified earlier.
As an alternative to centralized quality assessments, a popular choice of quality assessment and control is developer-centric assessment. In this approach, quality assessment is done at each developer's workstation and based on that section of code assigned to the developer. Typically code quality tools such as PMD, “FINDBUGS”, FXCop and test harnesses such as JUnit are used for assessing code quality at developers' workstations. These tools run on a developer's workstation either in an integrated development environment (IDE) or in a standalone environment, e.g. on a operating-system command prompt. Given the de-centralized nature of this approach, a holistic view of quality at any given point in time is not available. Nevertheless, such de-centralized quality assessments are particularly desirable in those instances in which functionality testing is difficult to implement in a centralized manner.
While both centralized and de-centralized quality assessment approaches have various advantages and disadvantages, techniques drawing upon the benefits of both approaches while minimizing their respective disadvantages would represent a welcome addition to the field.